Maven 查看依赖,依赖冲突,更新依赖 您所在的位置:网站首页 linux滚动更新和版本更新 依赖冲突吗 Maven 查看依赖,依赖冲突,更新依赖

Maven 查看依赖,依赖冲突,更新依赖

2024-05-16 09:51| 来源: 网络整理| 查看: 265

Maven管理小项目的依赖时通常没有问题,在idea右侧的maven projects中对应的模块名称上右键,选择Reimport即可更新相关依赖。但遇到庞大的项目,难免会有一些冲突。今天在解决公司的问题时,遇到依赖版本冲突及无法更新的问题,总结了一些有用的知识:

1. Maven 查看依赖树 mvn -Dverbose dependency:tree

依赖树结果如下:

[INFO] +- org.apache.tomcat:tomcat-servlet-api:jar:7.0.70:compile [INFO] +- org.apache.tomcat:tomcat-jsp-api:jar:7.0.70:compile [INFO] | +- org.apache.tomcat:tomcat-el-api:jar:7.0.70:compile [INFO] | \- (org.apache.tomcat:tomcat-servlet-api:jar:7.0.70:compile - omitted for duplicate) [INFO] +- net.sf.jasperreports:jasperreports:jar:5.6.0:compile [INFO] | +- (commons-beanutils:commons-beanutils:jar:1.8.0:compile - omitted for conflict with 1.8.3) [INFO] | +- commons-collections:commons-collections:jar:3.2.1:compile [INFO] | +- commons-digester:commons-digester:jar:2.1:compile [INFO] | | +- (commons-beanutils:commons-beanutils:jar:1.8.3:compile - omitted for duplicate) --------------------- 作者:lkforce 来源:CSDN 原文:https://blog.csdn.net/lkforce/article/details/62429998

递归依赖的关系列的算是比较清楚了,每行都是一个jar包,根据缩进可以看到依赖的关系。

最后写着compile的就是编译成功的。 最后写着omitted for duplicate的就是有jar包被重复依赖了,但是jar包的版本是一样的。 最后写着omitted for conflict with xxxx的,说明和别的jar包版本冲突了,而该行的jar包不会被引入。比如上面有一行最后写着omitted for conflict with 1.8.3,那么该行的commons-beanutils:jar:1.8.0不会被引入,只有1.8.3版本的会被引入。

原文:https://blog.csdn.net/lkforce/article/details/62429998

2. Maven 依赖冲突解决规则

maven有两种自动的解决依赖冲突的机制:最短路径和by order优先。前者是产生依赖冲突的依赖采用离项目最近(就是路径最短的)的那个版本。后者是指相同路径深度时,采用最先声明的那个版本。

Maven 依赖调解的第一原则:路径最短者优先。 假设项目 A 中存在如下依赖关系: A -> B -> C -> X(V1) A -> D -> X(V2) X(V1)的路径深度为 3,X(V2) 的路径深度为 2,X(V2) 的路径深度比 X(V1) 要短,所以 X(V2) 会被 Maven 解析使用。

Maven 依赖调解的第二原则:最先声明者优先。 假设项目 A 中存在如下依赖关系: A -> B -> Y(V1) A -> C -> Y(V2) Y(V1) 和 Y(V2) 的依赖深度都为 2,所以 Maven 依赖调解的第一原则并不能解决这样的问题。在依赖路径深度相等的前提下,根据在 POM 中依赖声明的先后顺序,最先声明者会被解析使用。该例中如果 B 的依赖声明在 C 之前,那么 Y(V1) 就会被解析使用;如果 C 的依赖声明在 B 之前,那么 Y(V2)就会被解析使用。

还有手动控制的禁止依赖传递和取消依赖的方法。 使用标签来去掉某个dependency依赖中的某一个jar包或一堆jar包,中的jar包或者依赖的相关jar包都会被忽略,从而在两个dependency都依赖某个jar包时,可以保证只使用其中的一个。

com.alibaba dubbo 2.8.3.2 guava com.google.guava spring org.springframework

可以这么写:

3. 强制更新Maven 依赖的方法

Intellj 自动载入Mave依赖的功能很好用,但有时候会碰到问题,导致pom文件修改却没有触发自动重新载入的动作,此时需要手动强制更新依赖。 如下:

手动删除Project Settings里面的Libraries内容; 在Maven Project的试图里clean一下,删除之前编译过的文件; 项目右键-》Maven-》Reimport

Ok, 此时发现依赖已经建立!

网上还有一个方法:mvn clean install -e -U (不过我的没看到效果,提供给大家参考)

原文:https://blog.csdn.net/felcon/article/details/51980344

其他有用的

maven依赖冲突解决办法 https://blog.csdn.net/feinifi/article/details/83063094

Maven的依赖-硬依赖,传递依赖,依赖排除(NEW) https://schy-hqh.iteye.com/blog/1950125



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有